Next.js 因為SSR的關係所以會有一些比SPA複雜的設定
先設定 .babelrc
{
  "env": {
    "development": {
      "presets": [
        "next/babel"
      ]
    },
    "production": {
      "presets": [
        "next/babel"
      ]
    },
    "production-digital": {
      "presets": [
        "next/babel"
      ]
    },
    "production-heroku": {
      "presets": [
        "next/babel"
      ]
    },
    "test": {
      "presets": []
    }
  },
  "plugins": [
    [
      "styled-components",
      {
        "ssr": true,
        "displayName": true,
        "preprocess": false
      }
    ],
    "transform-decorators-legacy",
    [
      "import",
      {
        "libraryName": "antd",
        "style": "css"
      }
    ]
  ]
}
Next.js 本身已經配備有 next/babel 但是有些 plugin 還是要安裝如上面的設定擋
transform-decorators-legacy
styled-components
next.config.js 安裝@zeit/next-css antd 需要
const withCSS = require('@zeit/next-css')
https://github.com/zeit/next-plugins/tree/master/packages/next-css
Next with Ant 接下來在 pages/_document.js 底下打上下面的程式碼
import React from 'react'
import Document, { Head, Main, NextScript } from 'next/document'
import { ServerStyleSheet } from 'styled-components'
import stylesheet from 'antd/dist/antd.min.css'
export default class MyDocument extends Document {
  static getInitialProps({ renderPage }) {
    const sheet = new ServerStyleSheet()
    const page = renderPage(App => props =>
      sheet.collectStyles(<App {...props} />)
    )
    const styleTags = sheet.getStyleElement()
    return { ...page, styleTags }
  }
  render() {
    return (
      <html>
        <Head>
          <title>My page</title>
          {this.props.styleTags}
          <link rel="stylesheet" href="/_next/static/style.css" />
          <meta name="viewport" content="width=device-width, initial-scale=1" />
          <meta charSet="utf-8" />
          <style dangerouslySetInnerHTML={{ __html: stylesheet }} />
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </html>
    )
  }
}
_document.js 原本是next已經包好的內建檔案,next 允許覆蓋所以程式碼會看起來多一些 實際上ant需要的是這個引入
import stylesheet from 'antd/dist/antd.min.css'
另外如果有用 styled-component
getInitialProps 這個是在server端 先去呼叫前端拿到className 在SSR中先定義好與Client 一致化 才不會噴錯 初學者常會卡在這邊
總結
因為SSR的關係所以會有些設定比較繁瑣,只要按照以上方法設定就可以開始使用 Next with Ant or Styled-Components